博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(五)SpringMVC之使用Kaptcha实现验证码功能
阅读量:5941 次
发布时间:2019-06-19

本文共 5826 字,大约阅读时间需要 19 分钟。

 

一、什么是Kaptcha

Kaptcha是Google开发的用于自动生成验证码的插件。

 

二、怎么导入Kaptcha

① 如果没有用Maven管理工具的话就直接导入包(可以直接下载:pau8)

https://pan.baidu.com/s/11225kEsyIFPntYQF9lT2-A

② 用Maven的话,有两个地址可以用,一个是Google那边的,一个是把搬到Github上的

com.google.code.kaptcha
kaptcha
2.3
com.github.penggle
kaptcha
2.3.2

 

三、页面的代码

 

四、写在配置数据库的springX.xml文件中的kaptcha的参数信息

138
28
0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
4
no
105,179,50
1
black
25
楷体
black
8
com.google.code.kaptcha.impl.Shadow

具体的参数信息(参考其他网站的):

Constant 描述 默认值
kaptcha.border 图片边框,合法值:yes , no yes
kaptcha.border.color 边框颜色,合法值: r,g,b (and optional alpha) 或者 white,black,blue. black
kaptcha.border.thickness 边框厚度,合法值:>0 1
kaptcha.image.width 图片宽 200
kaptcha.image.height 图片高 50
kaptcha.producer.impl 图片实现类 com.google.code.kaptcha.impl.DefaultKaptcha
kaptcha.textproducer.impl 文本实现类 com.google.code.kaptcha.text.impl.DefaultTextCreator
kaptcha.textproducer.char.string 文本集合,验证码值从此集合中获取 abcde2345678gfynmnpwx
kaptcha.textproducer.char.length 验证码长度 5
kaptcha.textproducer.font.names 字体 Arial, Courier
kaptcha.textproducer.font.size 字体大小 40px.
kaptcha.textproducer.font.color 字体颜色,合法值: r,g,b 或者 white,black,blue. black
kaptcha.textproducer.char.space 文字间隔 2
kaptcha.noise.impl 干扰实现类 com.google.code.kaptcha.impl.DefaultNoise
kaptcha.noise.color 干扰颜色,合法值: r,g,b 或者 white,black,blue. black
kaptcha.obscurificator.impl 图片样式: 水纹com.google.code.kaptcha.impl.WaterRipple 鱼眼com.google.code.kaptcha.impl.FishEyeGimpy 阴影com.google.code.kaptcha.impl.ShadowGimpy com.google.code.kaptcha.impl.WaterRipple
kaptcha.background.impl 背景实现类 com.google.code.kaptcha.impl.DefaultBackground
kaptcha.background.clear.from 背景颜色渐变,开始颜色 light grey
kaptcha.background.clear.to 背景颜色渐变,结束颜色 white
kaptcha.word.impl 文字渲染器 com.google.code.kaptcha.text.impl.DefaultWordRenderer
kaptcha.session.key session key KAPTCHA_SESSION_KEY
kaptcha.session.date session date KAPTCHA_SESSION_DATE

 

五、在Controller中对kaptcher做出配置

//导入kaptcha实现得到验证码功能    private Producer kaptchaProducer = null;    @Autowired    public void setCaptchaProducer(Producer kaptchaProducer) {        this.kaptchaProducer = kaptchaProducer;    }
@RequestMapping(value="/login",method=RequestMethod.POST)    public String login(UserInfo u,Model model,HttpServletResponse response, HttpServletRequest request) throws UnsupportedEncodingException{        //获取设置好的验证码和待验证的验证码,如果验证成功就进行数据的操作,如果不对就直接刷新页面      String kaptchaCheck = (String) request.getSession().getAttribute(com.google.code.kaptcha.Constants.KAPTCHA_SESSION_KEY);        String kaptchaReceive = (String) request.getParameter("user_input_verifyCode");        if(kaptchaCheck!=null&&(kaptchaCheck.toUpperCase()).equals(kaptchaReceive.toUpperCase())) {            List
list = userInfoService.listUser(); for(UserInfo user:list) { if(u.getUserName().equals(user.getUserName())&&u.getPassword().equals(user.getPassword())) { model.addAttribute("user",user); if(request.getParameter("check")!=null) addCookie(u.getUserName(), u.getPassword(), response, request); return "index"; } } } return "login"; }
/**     * 利用Kaptcha插件来生成验证码     * @param request     * @param response     * @return     */    @RequestMapping("/kaptcha")      public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response){        //生成验证码的方法        response.setDateHeader("Expires",0);          response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");          response.addHeader("Cache-Control", "post-check=0, pre-check=0");          response.setHeader("Pragma", "no-cache");          response.setContentType("image/jpeg");          String capText = kaptchaProducer.createText();        request.getSession().setAttribute(Constants.KAPTCHA_SESSION_KEY, capText);        BufferedImage bi = kaptchaProducer.createImage(capText);          ServletOutputStream out = null;        try {            out = response.getOutputStream();            ImageIO.write(bi, "jpg", out);        } catch (IOException e) {            e.printStackTrace();        }          try {              out.flush();          } catch (IOException e) {            e.printStackTrace();        } finally {              try {                out.close();            } catch (IOException e) {                e.printStackTrace();            }          }          return null;      }

效果:

 

转载于:https://www.cnblogs.com/NYfor2018/p/9360989.html

你可能感兴趣的文章
远程桌面禁用本地资源,磁盘驱动器,复制文件等
查看>>
python selectors ftp服务端
查看>>
linux下chkconfig设置开机自启动
查看>>
一个java程序员的真实经历
查看>>
Linux下强大IP地址格式转换工具--netmask命令学习笔记
查看>>
java继承(实例讲解一)
查看>>
UML类图
查看>>
list-style-image 设置li不起作用问题
查看>>
加载内核并执行init程序
查看>>
基于JDK动态代理和CGLIB动态代理的实现Spring注解管理事务(@Trasactional)到底有什么区别。...
查看>>
通过微软KMS激活XenDesktop5 MCS产生的桌面
查看>>
centos7.4安装配置rocketmq单节点
查看>>
修改Ruby类路径
查看>>
常用服务器日志分析命令
查看>>
访问控制列表ACL
查看>>
KVM1-KVM虚拟机的自动安装和克隆
查看>>
移动开发参考书之Android篇
查看>>
Spring Boot (八)MyBatis + Docker + MongoDB 4.x
查看>>
智能监控,在日志产品运用中都经历了什么……
查看>>
centos 关闭开启防火墙
查看>>